博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
file upload download
阅读量:5059 次
发布时间:2019-06-12

本文共 8957 字,大约阅读时间需要 29 分钟。

1. 文件上传与下载

1.1 文件上传

案例:

         注册表单/保存商品等相关模块!

         --à 注册选择头像 / 商品图片

         (数据库:存储图片路径 / 图片保存到服务器中指定的目录)

 

文件上传,要点:

前台:

         1. 提交方式:post

         2. 表单中有文件上传的表单项: <input type=”file” />

         3. 指定表单类型:

                       默认类型:enctype="application/x-www-form-urlencoded"

                  文件上传类型:multipart/form-data

手动实现文件上传

           
用户名:
文件:
View Code
public class UploadServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        /*        request.getParameter(""); // GET/POST        request.getQueryString(); // 获取GET提交的数据         request.getInputStream(); // 获取post提交的数据   */                /***********手动获取文件上传表单数据************/                //1. 获取表单数据流        InputStream in =  request.getInputStream();        //2. 转换流        InputStreamReader inStream = new InputStreamReader(in, "UTF-8");        //3. 缓冲流        BufferedReader reader = new BufferedReader(inStream);        // 输出数据        String str = null;        while ((str = reader.readLine()) != null) {            System.out.println(str);        }                // 关闭        reader.close();        inStream.close();        in.close();    }
View Code

Apache提供的文件上传组件:FileUpload组件

文件上传功能开发中比较常用,apache也提供了文件上传组件!

FileUpload组件:

         1. 下载源码

         2. 项目中引入jar文件

                          commons-fileupload-1.2.1.jar  【文件上传组件核心jar包】

                          commons-io-1.4.jar     【封装了对文件处理的相关工具类】

public class UploadServlet extends HttpServlet {    // upload目录,保存上传的资源    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {                /*********文件上传组件: 处理文件上传************/                        try {            // 1. 文件上传工厂            FileItemFactory factory = new DiskFileItemFactory();            // 2. 创建文件上传核心工具类            ServletFileUpload upload = new ServletFileUpload(factory);                    // 一、设置单个文件允许的最大的大小: 30M            upload.setFileSizeMax(30*1024*1024);            // 二、设置文件上传表单允许的总大小: 80M            upload.setSizeMax(80*1024*1024);            // 三、 设置上传表单文件名的编码            // 相当于:request.setCharacterEncoding("UTF-8");            upload.setHeaderEncoding("UTF-8");                                    // 3. 判断: 当前表单是否为文件上传表单if (upload.isMultipartContent(request)){                // 4. 把请求数据转换为一个个FileItem对象,再用集合封装                List
list = upload.parseRequest(request); // 遍历: 得到每一个上传的数据 for (FileItem item: list){ // 判断:普通文本数据 if (item.isFormField()){ // 普通文本数据 String fieldName = item.getFieldName(); // 表单元素名称 String content = item.getString(); // 表单元素名称, 对应的数据 //item.getString("UTF-8"); 指定编码 System.out.println(fieldName + " " + content); } // 上传文件(文件流) ----> 上传到upload目录下 else { // 普通文本数据 String fieldName = item.getFieldName(); // 表单元素名称 String name = item.getName(); // 文件名 String content = item.getString(); // 表单元素名称, 对应的数据 String type = item.getContentType(); // 文件类型 InputStream in = item.getInputStream(); // 上传文件流 /* * 四、文件名重名 * 对于不同用户readme.txt文件,不希望覆盖! * 后台处理: 给用户添加一个唯一标记! */ // a. 随机生成一个唯一标记 String id = UUID.randomUUID().toString(); // b. 与文件名拼接 name = id +"#"+ name; // 获取上传基路径 String path = getServletContext().getRealPath("/upload"); // 创建目标文件 File file = new File(path,name); // 工具类,文件上传 item.write(file); item.delete(); //删除系统产生的临时文件 System.out.println(); } } } else { System.out.println("当前表单不是文件上传表单,处理失败!"); } } catch (Exception e) { e.printStackTrace(); } }
View Code

文件上传与下载,完整案例:

步骤:

1. 文件上传

2. 列表下载

Index.jsp              文件上传              文件下载             
View Code
Upload.jsp           
<%--
--%> 用户名:
文件:
Downlist.jsp
序号 文件名 操作
${vs.count } ${en.value } <%--下载--%>
下载
View Code
FileServlet.java/** * 处理文件上传与下载 * @author Jie.Yuan * */public class FileServlet extends HttpServlet {    public void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException {        // 获取请求参数: 区分不同的操作类型        String method = request.getParameter("method");        if ("upload".equals(method)) {            // 上传            upload(request,response);        }                else if ("downList".equals(method)) {            // 进入下载列表            downList(request,response);        }                else if ("down".equals(method)) {            // 下载            down(request,response);        }    }            /**     * 1. 上传     */    private void upload(HttpServletRequest request, HttpServletResponse response)    throws ServletException, IOException {                try {            // 1. 创建工厂对象            FileItemFactory factory = new DiskFileItemFactory();            // 2. 文件上传核心工具类            ServletFileUpload upload = new ServletFileUpload(factory);            // 设置大小限制参数            upload.setFileSizeMax(10*1024*1024);    // 单个文件大小限制            upload.setSizeMax(50*1024*1024);        // 总文件大小限制            upload.setHeaderEncoding("UTF-8");        // 对中文文件编码处理            // 判断            if (upload.isMultipartContent(request)) {                // 3. 把请求数据转换为list集合                List
list = upload.parseRequest(request); // 遍历 for (FileItem item : list){ // 判断:普通文本数据 if (item.isFormField()){ // 获取名称 String name = item.getFieldName(); // 获取值 String value = item.getString(); System.out.println(value); } // 文件表单项 else { /******** 文件上传 ***********/ // a. 获取文件名称 String name = item.getName(); // ----处理上传文件名重名问题---- // a1. 先得到唯一标记 String id = UUID.randomUUID().toString(); // a2. 拼接文件名 name = id + "#" + name; // b. 得到上传目录 String basePath = getServletContext().getRealPath("/upload"); // c. 创建要上传的文件对象 File file = new File(basePath,name); // d. 上传 item.write(file); item.delete(); // 删除组件运行时产生的临时文件 } } } } catch (Exception e) { e.printStackTrace(); } } /** * 2. 进入下载列表 */ private void downList(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 实现思路:先获取upload目录下所有文件的文件名,再保存;跳转到down.jsp列表展示 //1. 初始化map集合Map
<包含唯一标记的文件名, 简短文件名>
; Map
fileNames = new HashMap
(); //2. 获取上传目录,及其下所有的文件的文件名 String bathPath = getServletContext().getRealPath("/upload"); // 目录 File file = new File(bathPath); // 目录下,所有文件名 String list[] = file.list(); // 遍历,封装 if (list != null && list.length > 0){ for (int i=0; i
View Code

 

转载于:https://www.cnblogs.com/skorzeny/p/6067827.html

你可能感兴趣的文章
关于源程序到可运行程序的过程
查看>>
转载:mysql数据库密码忘记找回方法
查看>>
scratch少儿编程第一季——06、人在江湖混,没有背景怎么行。
查看>>
【贪心+DFS】D. Field expansion
查看>>
C# Async与Await的使用
查看>>
Mysql性能调优
查看>>
iOS基础-UIKit框架-多控制器管理-实例:qq界面框架
查看>>
IOS-每个程序员的编程之路上都应该看这11本书
查看>>
自定义tabbar(纯代码)
查看>>
小程序底部导航栏
查看>>
ibatis学习笔记
查看>>
18-ES6(1)
查看>>
poj1611 简单并查集
查看>>
Ubuntu 14.04下安装CUDA8.0
查看>>
跨平台开发 -- C# 使用 C/C++ 生成的动态链接库
查看>>
C# BS消息推送 SignalR介绍(一)
查看>>
WPF星空效果
查看>>
WPF Layout 系统概述——Arrange
查看>>
PIGOSS
查看>>
几款Http小服务器
查看>>